package org.wangchaocheng.cloudgallery.interceptor;

import cn.dev33.satoken.interceptor.SaInterceptor;
import cn.dev33.satoken.router.SaRouter;
import cn.dev33.satoken.stp.StpUtil;
import org.jetbrains.annotations.NotNull;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 认证拦截器
 *
 * @author wangchaocheng
 * @date 2025/04/09
 */
@Configuration
public class AuthenticationInterceptor implements WebMvcConfigurer {

    @Override
    public void addInterceptors(@NotNull InterceptorRegistry registry) {
        // 注册 Sa-Token 拦截器，校验规则为 StpUtil.checkLogin() 登录校验。
        registry.addInterceptor(buildSaTokenInterceptor())
            .addPathPatterns("/**")
            .excludePathPatterns("/authentication/login-auth", "/user/register");
    }

    private HandlerInterceptor buildSaTokenInterceptor() {
        return new SaInterceptor(handler -> {
            // 指定一条 match 规则
            SaRouter
                // 拦截的 path 列表，可以写多个 */
                .match("/**")
                // 排除掉的 path 列表，可以写多个
                .notMatch("/user/doLogin")
                // 要执行的校验动作，可以写完整的 lambda 表达式
                .check(r -> StpUtil.checkLogin());
        });
    }
}
